/*
 * $Id: QECountry.h 34 2009-04-21 20:24:55Z jon@bway.net $
 * Sleeper
 *
 * Created by Jon Gordon on 3/15/08
 * Copyright Jon Gordon.  All rights reserved.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining 
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including 
 * without limitation the rights to use, copy, modify, merge, publish, 
 * distribute, sublicense, and/or sell copies of the Software, and to 
 * permit persons to whom the Software is furnished to do so, subject to 
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */


#import <Cocoa/Cocoa.h>

extern NSString *qeKeyCountryDesigIndep;
extern NSString *qeKeyCountryDesigTerr;
extern NSString *qeKeyCountryDesigIntlZone;
extern NSString *qeKeyCountryDesigAutReg;
extern NSString *qeKeyCountryDesigAdmin;
extern NSString *qeKeyCountryDesigContest;

/*
 * Corresponds to a single distinct geopolitical entity, largely following
 * usage from CIA Factbook.
 *
 * Most recent revision based on March 9, 2009 revision to Factbook.
 */
@interface QECountry : NSObject {
    uint32_t uid;
    NSString *name;
    NSString *longName;
    NSString *designation;
    NSString *iso3166_1num;
    NSString *iso3166_1alpha2;
    NSString *iso3166_1alpha3;
    NSString *fips10_4;
    QECountry *dependencyOf;
}

+ (NSArray *)allCountries;
+ (NSArray *)allIndependentCountries;
+ (QECountry *)countryForUid:(uint32_t)uid;
+ (QECountry *)countryForName:(NSString *)name;
+ (NSArray *)countriesForNames:(NSArray *)names;
+ (QECountry *)countryForIso3166_1num:(NSString *)isoCode;
+ (QECountry *)countryForIso3166_1alpha2:(NSString *)isoCode;
+ (QECountry *)countryForIso3166_1alpha3:(NSString *)isoCode;
+ (QECountry *)countryForFips10_4:(NSString *)fipsCode;

- (uint32_t)uid;
- (NSString *)name;
- (NSString *)longName;
- (NSString *)defaultName;
- (NSString *)designation;
- (NSString *)iso3166_1num;
- (NSString *)iso3166_1alpha2;
- (NSString *)iso3166_1alpha3;
- (NSString *)fips10_4;

/*
 * Returns the immediately-larger geopolitical entity that contains this one.
 * If this is an independent country or a contested zone, this value should be
 * nil.  Note that the returned entity can itself be a dependency of a larger
 * entity.  For example, Howland Island is considered a dependency of the
 * entity called "U.S. Minor Outlying Islands", which is itself a dependency
 * of the United States.
 */
- (QECountry *)dependencyOf;

/*
 * Returns the independent country that contains this entity.  If this entity
 * *is* an independent country, it returns itself. If this entity is a 
 * contested zone or otherwise not properly considered part of an independent
 * country, it returns nil.  Otherwise, it walks up the dependency
 * chain until it finds the relevant independent country.
 */
- (QECountry *)partOfIndependentCountry;

- (BOOL)isDependency;
@end
